#创建
re=/Ruby/
re=Regexp.new("Ruby")
re=%r(Ruby) #直接写 '\'
#匹配
re=~"Ruby" # !~

#模式
=begin
元字符
$ 行尾
^ 行首
. 任意字符(除换行)
* 0次及以上
+ 1次及以上
? 0次或1次
{n} n次
{n,m} n-m次 => {n,} {,m}
() 分组
(|) 选择
普通字符
0-9 a-z A-Z 普通符号
范围
[] [^ ]
转义字符
\s => 空格(0x20) 制表符 换行符 换页符
\d => 数字
\w => 字母 数字
\A 字符串开头
\z 字符串结尾
\Z 字符串结尾(\n前一个)
\元字符 转义
最短匹配
*? 0次及以上
+? 1次及以上
=end

# quote(escape)
# => 返回转义了元字符后的字符串

#选项
# i 忽略大小写
# x 忽略空白字符和#之后的字符
# m .可以匹配换行符
# Regexp.new("",Regexp::IGNORECASE|Regexp::EXTENDED|Regexp::MULTILINE)

#捕获
re=/(.)(\d\d)+(.)/=~"123456"
p $1,$2,$3 #=> 1 45 6
#p $~
/(.)(?:\d\d)+(.)/=~"123456" # ?:过滤不需要的模式
p $1,$2,$3 #=> 1 6
/c./i=~"ABCDEF"
p $`,$&,$' #=> 匹配部分前的字符串:AB 匹配部分:CD 匹配部分后:EF
#匹配后的结果通过 $~ 或Regexp.last_match获取(MatchData类),有 $~[1]=$1,$~.pre_match=$`

#替换
# sub(!)(模式，替换内容)(一次) gsub(!)(模式，替换内容)(所有)
#使用块
str="abracta"
nstr=str.sub(/.a/) do |matched|
    '<'+matched.upcase+'>'
end
p nstr #=> ab<RA>cta

#获取
# scan(模式)返回字符串数组 scan(){}返回数组，除非块变量与()数量相等
